a11y: Make menuitem accessible return ROLE_MENU when it has a submenu
authorBenjamin Otte <otte@redhat.com>
Mon, 11 Jul 2011 00:21:34 +0000 (02:21 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 11 Jul 2011 00:51:43 +0000 (02:51 +0200)
Otherwise keep using the role set via atk_object_set_role().

gtk/a11y/gtkmenuitemaccessible.c

index 71c9931afc069f522f56ed01a6f0ecd938b085ab..2a540516b6165f3d376926d19a8fdcdc2fd6583e 100644 (file)
@@ -154,6 +154,19 @@ gtk_menu_item_accessible_ref_state_set (AtkObject *obj)
   return state_set;
 }
 
+static AtkRole
+gtk_menu_item_accessible_get_role (AtkObject *obj)
+{
+  GtkWidget *widget;
+
+  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
+  if (widget != NULL &&
+      gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)))
+    return ATK_ROLE_MENU;
+
+  return ATK_OBJECT_CLASS (_gtk_menu_item_accessible_parent_class)->get_role (obj);
+}
+
 static const gchar *
 gtk_menu_item_accessible_get_name (AtkObject *obj)
 {
@@ -223,6 +236,7 @@ _gtk_menu_item_accessible_class_init (GtkMenuItemAccessibleClass *klass)
   class->ref_state_set = gtk_menu_item_accessible_ref_state_set;
   class->initialize = gtk_menu_item_accessible_initialize;
   class->get_name = gtk_menu_item_accessible_get_name;
+  class->get_role = gtk_menu_item_accessible_get_role;
 }
 
 static void